class Date
{
	 friend ostream& operator << (ostream& out, const Date& d);
	 friend istream& operator >> (istream& in, Date& d);
public:
     Date(int year = 1, int month = 1, int day = 1)
     	:_year(year)
     	, _month(month)
     	, _day(day)
     {}
     operator bool()
    {
		// 这里是随意写的，假设输入_year为0，则结束
     	if (_year == 0)
     		return false;
     	else
     		return true;
	}
private:
 	int _year;
 	int _month;
 	int _day;
};

istream& operator >> (istream& in, Date& d) 
{
 	in >> d._year >> d._month >> d._day;
 	return in; 
}
ostream& operator << (ostream& out, const Date& d) 
{
 	out << d._year << " " << d._month <<" "<< d._day ;
 	return out; 
}

// C++ IO流，使用面向对象+运算符重载的方式
// 能更好的兼容自定义类型，流插入和流提取
int main()
{
 	// 自动识别类型的本质--函数重载
 	// 内置类型可以直接使用--因为库里面ostream类型已经实现了
     int i = 1;
     double j = 2.2;
     cout << i << endl;
     cout << j << endl;
     // 自定义类型则需要我们自己重载<< 和 >>
     Date d(2022, 4, 10);
     cout << d;
     while (d)
     {
         cin >> d;
         cout << d;
     }
     return 0; 
}

